草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 重载是否违反里氏替换原则?

我是OOP的新手。最近我读到有关Liskov替换原则的内容。在下面给出的代码中,Square类继承了Give_Area。假设Square类有一些与正方形相关的事情(比如有效性检查)。Give_Area给出正方形的面积(4个顶点在圆的周长上)和圆的面积。所以,如果给我一个Radius,我必须打印圆和正方形的面积(由放置在该圆周长上的顶点组成)。为了获得圆的面积,我使用了一个参数。但是在获取正方形面积时没有参数。因此我在这里完成了重载。#include#includeusingnamespacestd;classGive_Area{public:doubleRadius;doubleAre

c++类型转换运算符重载和隐式转换

如果我正在重载类型转换运算符,当需要隐式转换但找不到时,我会遇到编译错误。考虑一个简单的示例,其中我有一个包含类型(在本例中为longlong)的包装类:classmy_wrapper{longlongstate;public:my_wrapper(longlong_in):state(_in){}my_wrapper&operator=(constlonglongrhs){state=rhs;return*this;}operatorlonglong(){returnstate;}};现在的问题是,如果我想将代码转换为其他内容(例如void*...假设我为此使用64位),则如果不指定

c++ - 没有用于调用 std::transform 的匹配函数,未解析的重载函数类型

我有以下正确的编译代码:#include#include#includetemplatevoidwrite_map(conststd::multimapmm){std::coutfirstsecondvoidwrite_map(conststd::mapm){std::coutfirstsecondstd::pairflip_pair(conststd::pair&p){returnstd::pair(p.second,p.first);}templatestd::multimapflip_map(conststd::map&src){std::multimapdst;//LINE_B

通用模板 ostream << 运算符的 C++ 不明确重载

这个问题紧接我之前的问题:Genericoperator我想在哪里实现一个通用的适用于拥有to_str()的任何类的运算符方法。我已经成功地检查了一个类是否实现了to_str()方法与用途std::cout感谢这个answer.但是,我在编写模板时遇到困难ostream运营商制作std::cout有效。以下测试代码:#include#include#includetemplateusingvoid_t=void;templatestructhas_to_string:std::false_type{};templatestructhas_to_string().to_str())>>:

c++ - 当参数是初始化列表且参数是引用时的重载解析

structA{A(int);};structB{explicitB(A);B(constB&);};Bb({0});我问了一个问题Overloadresolutiongetsdifferentresultbetweengccandclang和@JohannesSchaub-litb解释了活跃的规则。但是我对13.3.3.1.4Referencebinding还有一些疑问。N452713.3.3.1.5[over.ics.list]p1和p81Whenanargumentisaninitializerlist(8.5.4),itisnotanexpressionandspecialru

c++ - 非依赖名称的重载解析何时发生,在定义上下文或实例化点?

3.4[basic.lookup]/p1Overloadresolution(13.3)takesplaceafternamelookuphassucceeded.voidg(long);voidg(int,int);templatevoidf(){g(0);}voidg(int,int=0){}intmain(){f();}gcc编译成功,clang编译失败非依赖名称的重载解析何时发生,是在定义上下文中还是在实例化点?还是两者都对? 最佳答案 在这两种情况下。[温度.res]14.6\8Ifahypotheticalinstant

具有返回类型推导的 C++ 11 运算符重载

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion我有一个依赖于一种类型的模板类(例如templateclassVector)。现在,我想重载算术运算符:我可以将它们与用两种不同类型实例化的Vectors一起使用;结果与模板实例类型的推导方式相同;例子:Vectorfv={1.5,2.5};Vectoriv={1,2};autos1=fv+iv;//s1MUSTbeoftypeVector=={2.5,4.5}autos2=iv+fv;/

c++ - 自定义迭代器类中的重载 `!=` 运算符无法正常工作

我正在创建模板矩阵类,现在我正在实现迭代器类以迭代一列(这个迭代器类在我的Matrix类中)。template//"P"-PointerType;"V"-ValueTypeclassV_Iterator:publicstd::iterator{private:PitData_;public:size_typew;//widthofthematrixsize_typeh;//heightofthematrixpublic:V_Iterator(Pd):itData_(d){}public:V&operator*()const{return*itData_;}///////////////

c++ - std::function 的 operator== 的真正目的是什么?

我不止一次看到std::function的operator==被误用,我不得不解释它的真正用途是什么。为了有利于future读者的清晰起见,here是文档。上面提到的文档说:Comparesa std::function withanullpointer.Emptyfunctions(thatis,functionswithoutacallabletarget)compareequal,non-emptyfunctionscomparenon-equal.也就是说,std::function也有operatorbool()(here是文档),其行为方式几乎相同并且可以使用代替比较my_

内部类中的 C++ 模板运算符重载

如何为类模板的内部类重载operator+?我已经搜索了几个小时,但找不到答案。这是一个不起作用的最小示例:#includeusingnamespacestd;templatestructA{structB{Tm_t;B(Tt):m_t(t){}};};templatetypenameA::Boperator+(typenameA::Blhs,intn){lhs.m_t+=n;returnlhs;}intmain(intargc,char**argv){Aa;A::Bb(17.2);autoc=b+5;cout如果我这样编译,我会得到error:nomatchfor‘operator+